home *** CD-ROM | disk | FTP | other *** search
/ Gekikoh Dennoh Club 5 / Gekikoh Dennoh Club Vol. 5 (Japan).7z / Gekikoh Dennoh Club Vol. 5 (Japan) (Track 01).bin / internet / webx / jpged26s.lzh / GetBlock.s < prev    next >
Encoding:
Text File  |  1996-10-13  |  14.6 KB  |  747 lines

  1. *
  2. *
  3. *       GETBLOCK.S
  4. *
  5. *
  6. *
  7.     include    DOSCALL.MAC
  8.     include IOCSCALL.MAC
  9.     include    JPEG.MAC
  10.     include    work.inc
  11.  
  12.     .text
  13.  
  14.     .xref    IDCT            'IDCT.S'
  15.     .xref    IDCT_Y            'IDCT_Y.S'
  16.     .xref    YUV_to_RGB        'YUV.S'
  17.     .xref    YUV_to_RGB2        'YUV.S'
  18.     .xref    YUV_to_RGB4        'YUV.S
  19.     .xref    DecodeDCAC        'DECODE.S'
  20.     .xref    preDECODE        'DECODE.S'
  21.     .xref    Zigzag,Zigzag_Y        'MES.S'
  22.     .xref    inkey            'LOAD.S'
  23.     .xref    close_temp        'LOAD.S'
  24.     .xref    work_adrs        'JPEG.S'
  25.     .xref    clear_area        'JPEG.S'
  26.     .xref   make_YUV_RGB_table    'MK_MUL_TBL.S'
  27.     .xref    make_IDCT_table        'MK_MUL_TBL.S'
  28.     .xref    make_RGB_table        'MK_MUL_TBL.S'
  29.     .xref    make_interval_work    'MK_MUL_TBL.S'
  30.     .xref    Write_error        'ERROR.S'
  31.     .xref    set_HOME        'LOAD.S'
  32.     .xref    calc_XY_dots        'SCROLL.S'
  33.     .xref    COS_TBL_adrs
  34.     .xref    Disp_Pic_Position    'GETHEAD.S'
  35.     .xref    GetBuf            'Decode.s'
  36.  
  37.     .xdef    GetBlock
  38.  
  39. ******************************************************************************
  40. *
  41. *    ÉFì╖ÉMìåé╠ôⁿù═â}âNâì
  42. *
  43. ******************************************************************************
  44. DecodeUV    macro    label,stack_depth
  45.         local    DecodeUV1,DecodeUV2
  46.  
  47.   lea     udata1+6*16+1*2(a6),a0
  48.  
  49.     lea.l    DCC_DECODE_TBL(a6),a1
  50.     lea    preDC+2(a6),a2
  51.     lea.l    Zigzag(pc),a3
  52.     lea    UQC_tbl(a6),a4
  53.     bsr    DecodeDCAC
  54.  
  55.     move.w    d4,-(sp)
  56. *
  57.   lea     vdata1+6*16+1*2(a6),a0
  58.  
  59. *    lea.l    DCC_DECODE_TBL(a6),a1
  60.     lea    preDC+4(a6),a2
  61.     lea.l    Zigzag(pc),a3
  62.     lea    UQC_tbl(a6),a4
  63.     bsr    DecodeDCAC
  64.  
  65.     move.w    d4,-(sp)
  66.  
  67.     movem.w    d1/d5-d6,FFxxFlag(a6)    d1=FFxxFlag d5=rdata d6=rlen
  68.     movem.l    d7/a5,LastBufSize(a6)    d7=LastBufSize,LastFFxxSize a5=bufadr
  69.  
  70.     move.w    y1(a6),d0        2(sp),d0
  71.     add.w    DeltaY(a6),d0
  72.     cmp.w    YS(a6),d0
  73.     bcs    DecodeUV1
  74.  
  75.     move.w    x1(a6),d0        (sp),d0
  76.     add.w    DeltaX(a6),d0
  77.     cmp.w    XS(a6),d0
  78.     bcc    DecodeUV2
  79. DecodeUV1:
  80.     lea.l    stack_depth(sp),sp
  81.     bra    label
  82. DecodeUV2:
  83.     endm
  84.  
  85. ******************************************************************************
  86. *  âJâëü[ôⁿù═
  87. *
  88. *      (sp) = ôWèJ├▐░└èiö[▒─▐┌╜
  89. *     4(sp) = êΩé┬ë║é╠╠▐█»╕é╠ôWèJ├▐░└èiö[▒─▐┌╜
  90. ******************************************************************************
  91. GetBlock
  92.  
  93. *ŵÄZâeü[âuâïüEânâtâ}âôò£ìåâeü[âuâïì∞ɼ
  94. *---------------------------------
  95. GetBlock_make_table
  96.  
  97.         bsr    make_IDCT_table
  98.         bsr    make_YUV_RGB_table
  99.         bsr    make_RGB_table
  100.  
  101. *ëµæ£ê╩ÆuÅεò±Åëè·ë╗
  102. *---------------------------------
  103.         clr.w    HX(a6)
  104.         clr.w    HY(a6)
  105.  
  106.         movem.w    Interval(a6),d0-d1
  107.         bsr    calc_XY_dots
  108.  
  109.     *Xê╩ÆuÅεò±Åëè·ë╗
  110.     *------------------------
  111.         move.w    XL2(a6),d7
  112.         cmp.w    #512,Xline(a6)
  113.         bcc    @f
  114.         move.w    Xline(a6),d7
  115.         lsr.w    d7
  116. @@
  117.         clr.w    Home_X(a6)
  118.         move.w    HS(a6),Home_FX(a6)
  119.         move.w    d7,MOUSE_X(a6)
  120.         move.w    d7,MOUSE_TX(a6)
  121.  
  122.     *Yê╩ÆuÅεò±Åëè·ë╗
  123.     *------------------------
  124.         move.w    YL2(a6),d7
  125.         cmp.w    #512,Yline(a6)
  126.         bcc    @f
  127.         move.w    Yline(a6),d7
  128.         lsr.w    d7
  129. @@
  130.         clr.w    Home_Y(a6)
  131.         move.w    VS(a6),Home_FY(a6)
  132.         move.w    d7,MOUSE_Y(a6)
  133.         move.w    d7,MOUSE_TY(a6)
  134.  
  135.         move.w    HE(a6),d7
  136.         sub.w    HS(a6),d7
  137.         addq.w    #1,d7
  138.         bsr     make_interval_work
  139.  
  140. *âÅü[âNâGâèâAì∞ɼ
  141. *--------------------------------
  142.     move.l    Scroll_Area(a6),d0
  143.     move.l    lx(a6),d1
  144.     add.l    d0,d1
  145.     move.l    d1,-(sp)        4(sp)
  146.     move.l    d0,-(sp)         (sp)
  147.  
  148.     move.w    Interval+4(a6),d0
  149.     move.w    Interval+6(a6),d1
  150.     lsr.w    #1,d1
  151.     add.w    d1,d0
  152.     move.w    d0,yi(a6)        -(sp) *  yi     6(sp)
  153.     move.w    VS(a6),v(a6)        -(sp)         4(sp)
  154.     clr.w    y1(a6)            -(sp)             2(sp),0(sp)
  155.     clr.w    x1(a6)            -(sp)             2(sp),0(sp)
  156.  
  157.     bsr    preDECODE    âfü[â^ô╟é▌ì₧é▌ÅÇö⌡üiânâtâ}âôò£ìåüj
  158.     bra    Getb1stBlock
  159.  
  160. *ôWèJò\Ī
  161. *--------------------------------
  162. getb10
  163.  
  164.     bsr    inkey
  165.     tst.l    d0
  166.     bmi    exit
  167.  
  168.    btst.b   #4,Sys_flag(a6)
  169.    beq      getb11            ëµæ£ôWèJ╩▐»╠ºé═1╫▓▌ò¬é╠é▌
  170.  
  171.     move.l    Scroll_Area(a6),d0
  172.     move.l    d0,(sp)
  173.     add.l    lx(a6),d0
  174.     move.l    d0,4(sp)
  175.  
  176. getb11
  177.  
  178.     clr.w    x1(a6)
  179.  
  180. getb20
  181.     movem.w    FFxxFlag(a6),d1/d5-d6    d1=FFxxFlag d5=rdata d6=rlen
  182.     movem.l    LastBufSize(a6),d7/a5    d7=LastBufSize,LastFFxxSize a5=bufadr
  183.     tst.w    d7
  184.     bnz    Getb1stBlock        é▄é╛$FFé▄é┼ô╟é▌ì₧é±é┼éóé╚éó
  185.  
  186.     bsr    GetBuf
  187.     addq.w    #1,d7
  188.     move.w    rlen(a6),d6
  189.     bnz    Getb1stBlock        $FFDxé┼é═é╚é⌐é┴é╜
  190.     
  191.     subq.w    #1,d7
  192.     move.b    (a5)+,d5
  193.     moveq.l    #8,d6
  194.  
  195.     *æµéPâuâìâbâNé╠ôⁿù═
  196.     *--------------------------
  197. Getb1stBlock
  198.  
  199.       lea     ydata1+7*16+1*2(a6),a0
  200.       lea     DCL_DECODE_TBL(a6),a1
  201.       lea     preDC(a6),a2
  202.     lea.l    Zigzag_Y(pc),a3
  203.       lea     UQL_tbl(a6),a4
  204.       bsr     DecodeDCAC
  205.       move.w  d4,-(sp)
  206.  
  207.       cmp.b   #1,uvmode(a6)
  208.       beq     getb60
  209.  
  210.     *æµéQâuâìâbâNé╠ôⁿù═
  211.     *-----------------------------
  212.       lea     ydata2+7*16+1*2(a6),a0
  213. *    lea.l    DCL_DECODE_TBL(a6),a1
  214.       lea     preDC(a6),a2
  215.     lea.l    Zigzag_Y(pc),a3
  216.       lea     UQL_tbl(a6),a4
  217.       bsr     DecodeDCAC
  218.  
  219.     move.w    d4,-(sp)
  220. *
  221.       cmp.b   #2,uvmode(a6)
  222.       beq     getb50
  223.  
  224.     *æµéRâuâìâbâNé╠ôⁿù═
  225.     *----------------------------------
  226.       lea     ydata3+7*16+1*2(a6),a0
  227. *    lea.l    DCL_DECODE_TBL(a6),a1
  228.       lea     preDC(a6),a2
  229.     lea.l    Zigzag_Y(pc),a3
  230.       lea     UQL_tbl(a6),a4
  231.       bsr     DecodeDCAC
  232.  
  233.     move.w    d4,-(sp)
  234.  
  235.     *æµéSâuâìâbâNé╠ôⁿù═
  236.     *-----------------------------------
  237.       lea     ydata4+7*16+1*2(a6),a0
  238. *    lea.l    DCL_DECODE_TBL(a6),a1
  239.       lea     preDC(a6),a2
  240.     lea.l    Zigzag_Y(pc),a3
  241.       lea     UQL_tbl(a6),a4
  242.       bsr     DecodeDCAC
  243.  
  244.     move.w    d4,-(sp)
  245. *
  246. *
  247. *  éPü^éSé╔è╘ê°é⌐éΩé╜âfü[â^
  248. *----------------------------------------
  249.     DecodeUV    getb45,2*6
  250.  
  251.  
  252.     move.w    2+2+2+2+2(sp),d0
  253.     lea    ydata1(a6),a0
  254.     move.l    COS_TBL_adrs(pc),a6
  255.       bsr     IDCT_Y
  256.  
  257.       move.w  2+2+2+2(sp),d0
  258.       lea     ydata2-ydata1(a0),a0
  259.       bsr     IDCT_Y
  260.  
  261.       move.w  2+2+2(sp),d0
  262.       lea     ydata3-ydata2(a0),a0
  263.       bsr     IDCT_Y
  264.  
  265.       move.w  2+2(sp),d0
  266.       lea     ydata4-ydata3(a0),a0
  267.       bsr     IDCT_Y
  268.  
  269.       move.w  2(sp),d0
  270.       lea     udata1-ydata4(a0),a0
  271.       bsr     IDCT
  272.  
  273.       move.w  (sp),d0
  274.       lea     vdata1-udata1(a0),a0
  275.       bsr     IDCT
  276.  
  277.       movem.w  (sp)+,d0-d5
  278.  
  279.     moveq.l    #63*2,d6
  280.     sub.w    d6,d0
  281.     clr.w    d0
  282.     addx.w    d0,d0
  283.     sub.w    d6,d1
  284.     addx.w    d0,d0
  285.     move.w    d0,d1
  286.  
  287.     sub.w    d6,d2
  288.     addx.w    d0,d0
  289.     sub.w    d6,d3
  290.     roxl.w    #3,d0
  291.  
  292.     sub.w    d6,d4
  293.     addx.w    d1,d1
  294.     sub.w    d6,d5
  295.     roxl.w    #3,d1
  296.  
  297.       movea.l (sp),a0
  298.  
  299.       move.l   work_adrs(pc),a6
  300.       move.w  d0,-(sp)
  301.       lea     ydata1(a6),a1
  302.       lea     vdata1(a6),a3
  303.     bsr    YUV_to_RGB4
  304.  
  305.       move.w  (sp)+,d1
  306.  
  307.       movea.l  4(sp),a0
  308.       move.l  work_adrs(pc),a6
  309.       lea     ydata3(a6),a1
  310.       lea     vdata1+32*2(a6),a3
  311.     bsr     YUV_to_RGB4
  312.  
  313. getb45
  314.       add.l   #128*2,(sp)
  315.       add.l   #128*2,4(sp)
  316.  
  317.       bra     getb80
  318. *
  319. *  éPü^éQé╔è╘ê°é⌐éΩé╜âfü[â^
  320. *------------------------------------
  321. getb50
  322.     DecodeUV    getb55,2*4
  323. *
  324.     move.w    2+2+2(sp),d0
  325.     lea    ydata1(a6),a0
  326.     move.l    COS_TBL_adrs(pc),a6
  327.       bsr     IDCT_Y
  328.  
  329.       move.w  2+2(sp),d0
  330.       lea     ydata2-ydata1(a0),a0
  331.       bsr     IDCT_Y
  332.  
  333.       move.w  2(sp),d0
  334.       lea     udata1-ydata2(a0),a0
  335.       bsr     IDCT
  336.  
  337.       move.w  (sp),d0
  338.       lea     vdata1-udata1(a0),a0
  339.       bsr     IDCT
  340.  
  341.       movem.w  (sp)+,d0-d3
  342.  
  343.     moveq.l    #63*2,d6
  344.     sub.w    d6,d2
  345.     clr.w    d2
  346.     addx.w    d2,d2
  347.     sub.w    d6,d3
  348.     addx.w    d2,d2
  349.  
  350.     sub.w    d6,d1
  351.     addx.w    d2,d2
  352.     sub.w    d6,d0
  353.     roxl.w    #3,d2
  354.  
  355.       move.l  (sp),a0
  356.       move.l  work_adrs(pc),a6
  357.       lea     ydata1(a6),a1
  358.       lea     vdata1(a6),a3
  359.       bsr     YUV_to_RGB2
  360.  
  361. getb55
  362.       add.l   #128*2,(sp)
  363.       bra     getb80
  364. *
  365. *  è╘ê°é⌐éΩé─éóé╚éóâfü[â^
  366. *
  367. getb60
  368.  
  369.     tst.b    colormode(a6)
  370.     beq    getb60_color    *colorëµæ£é┼éáéΘ
  371.  
  372.     *╙╔╕█ëµæ£ùpôWèJ
  373.     *------------------------------
  374.         movem.w    d1/d5-d6,FFxxFlag(a6)    d1=FFxxFlag d5=rdata d6=rlen
  375.         movem.l    d7/a5,LastBufSize(a6)    d7=LastBufSize,LastFFxxSize a5=bufadr
  376.  
  377.  
  378.         clr.w    udata1+0*8*2(a6)
  379.         clr.w    udata1+4*8*2(a6)
  380.         clr.w    vdata1+0*8*2(a6)
  381.         clr.w    vdata1+4*8*2(a6)
  382.  
  383.         move.w    (sp),d0
  384.         lea    ydata1(a6),a0
  385.         move.l    COS_TBL_adrs(pc),a6
  386.         bsr    IDCT_Y
  387.  
  388.         move.w    (sp)+,d2
  389.         moveq.l    #63*2,d6
  390.         sub.w    d6,d2
  391.         clr.w    d2
  392.         roxl.w    #2+3,d2
  393.  
  394.         move.l    (sp),a0
  395.         move.l    work_adrs(pc),a6
  396.         lea    ydata1(a6),a1
  397.         lea    vdata1(a6),a3
  398.         bsr    YUV_to_RGB
  399.         add.l    #128,(sp)
  400.         *╙╔╕█ëµæ£ÉΩùp Äƒé╠ëíò√îⁿé╠ê╩Æu
  401.         *------------------------------
  402.         movea.l    work_adrs(pc),a6
  403.         move.w    x1(a6),d0        (sp),d0
  404.         add.w    DeltaX(a6),d0
  405.         move.w    d0,x1(a6)        (sp)
  406.         cmp.w    Xline(a6),d0
  407.         bcc    getb90            ëíò√îⁿé╠ôWèJÅIù╣
  408.  
  409.         movem.w    FFxxFlag(a6),d1/d5-d6    d1=FFxxFlag d5=rdata d6=rlen
  410.         movem.l    LastBufSize(a6),d7/a5    d7=LastBufSize,LastFFxxSize a5=bufadr
  411.         bra    Getb1stBlock
  412.  
  413.     *╢╫░è╘ê°é½é╚é╡ëµæ£ùpôWèJ
  414.     *------------------------------
  415. getb60_color
  416.  
  417.     DecodeUV    getb65,2*3
  418.  
  419.     move.w    2+2(sp),d0
  420.     lea    ydata1(a6),a0
  421.     move.l    COS_TBL_adrs(pc),a6
  422.       bsr     IDCT_Y
  423.  
  424.       move.w  2(sp),d0
  425.       lea     udata1-ydata1(a0),a0
  426.       bsr     IDCT
  427.  
  428.       move.w  (sp),d0
  429.       lea     vdata1-udata1(a0),a0
  430.       bsr     IDCT
  431.  
  432.       movem.w  (sp)+,d0-d2
  433.     moveq.l    #63*2,d6
  434.     sub.w    d6,d2
  435.     clr.w    d2
  436.     addx.w    d2,d2
  437.  
  438.     sub.w    d6,d1
  439.     addx.w    d2,d2
  440.     sub.w    d6,d0
  441.     roxl.w    #3,d2
  442.  
  443.       move.l  (sp),a0
  444.       move.l  work_adrs(pc),a6
  445.       lea     ydata1(a6),a1
  446.       lea     vdata1(a6),a3
  447.       bsr     YUV_to_RGB
  448.  
  449. getb65
  450.       add.l   #128,(sp)
  451.  
  452.  
  453.  
  454. *ăé╠ëíò√îⁿé╠ê╩Æu
  455. *------------------------------
  456. getb80
  457.       movea.l work_adrs(pc),a6
  458.       move.w  x1(a6),d0            (sp),d0
  459.       add.w   DeltaX(a6),d0
  460.       move.w  d0,x1(a6)            (sp)
  461.       cmp.w   Xline(a6),d0
  462.       bcs     getb20            é▄é╛ëíò√îⁿé╠ôWèJé═ÅIéφé┴é─éóé╚éó
  463.  
  464. *├▌╬▀╫╪é╔ôWèJ├▐░└é≡Åæé½ì₧é▐
  465. *------------------------------
  466. getb90
  467.       btst.b  #2,Sys_flag(a6)
  468.       beq     getb90_next_ScrollArea    ├▌╬▀╫╪é╔ôWèJé╡é╚éó
  469.  
  470.       move.w  BlkX(a6),d1
  471.       mulu.w  DeltaY(a6),d1
  472.       lsl.l   #3+1,d1
  473.       move.l  d1,-(sp)
  474.       move.l  Scroll_Area(a6),-(sp)
  475.       move.w  temp_handle(a6),-(sp)
  476.       dos     _WRITE
  477.       lea.l   10(sp),sp
  478.       cmp.l   d0,d1
  479.       beq     getb90_next_ScrollArea    æSòöÅæé½ì₧é▀é╜
  480.  
  481.     bsr    close_temp        Åæé½ì₧é▀é╚éóé╠é┼├▌╬▀╫╪é≡ìφÅ£
  482.  
  483. *ëµæ£ò\Ī
  484. *------------------------------
  485. getb90_next_ScrollArea
  486.  
  487.       move.w  y1(a6),d2        2(sp),d2
  488.       move.w  v(a6),d3        4(sp),d3
  489.       move.w  yi(a6),d4        6(sp),d4
  490.       move.l  (sp),a0
  491.       sub.l   lx(a6),a0
  492.       move.w  HS(a6),a3
  493.       bsr     GetPart
  494.  
  495.     cmp.b   #3,uvmode(a6)
  496.     bne     getb92
  497.  
  498.       move.l  4(sp),a0
  499.       move.l  lx(a6),d0
  500.       sub.l   d0,a0
  501.       add.l   d0,(sp)
  502.       add.l   d0,4(sp)
  503.       bsr     GetPart
  504.  
  505. getb92
  506.       move.w  d4,yi(a6)        6(sp)
  507.       move.w  d2,y1(a6)        2(sp)
  508.       move.w  d3,v(a6)        4(sp)
  509.  
  510. *ëµû╩é╠╬░╤ê╩Æué≡É▌ÆΦ
  511. *----------------------------
  512.       btst    #4,Sys_flag2(a6)
  513.       bne     getb93            ë╝æzëµû╩é╔æ╬é╡é─ôWèJ
  514.       btst.b  #3,Sys_flag2(a6)
  515.       bne     getb93            ê╩ÆuÄwÆΦéáéΦ
  516.  
  517.       cmp.w   VSYsize(a6),d3
  518.       blt     getb93
  519.  
  520.     and.w    #$1ff,d3
  521.     moveq.l    #0,d2
  522.     bsr    set_HOME
  523.  
  524.     move.w    y1(a6),d0
  525.     sub.w    YL(a6),d0
  526.     add.w    YL2(a6),d0
  527.     move.w    d0,MOUSE_TY(a6)
  528.     move.w    d0,MOUSE_Y(a6)
  529.     bsr    Disp_Pic_Position
  530.  
  531. getb93
  532.  
  533. *ăé╠Åcò√îⁿé╠ê╩Æu
  534. *-------------------------------
  535.     move.w    y1(a6),d2        2(sp),d2
  536.     cmp.w    Yline(a6),d2
  537.     blt    getb10
  538.  
  539. *É│ÅφÅIù╣
  540. *--------------------------------
  541.     moveq.l    #0,d0
  542.  
  543. Getblock_end
  544.  
  545.     addq.l    #8,sp
  546.     rts
  547.  
  548. *ï¡ÉºÅIù╣
  549. *--------------------------------
  550. exit
  551.     moveq.l    #-1,d0
  552.     bra    Getblock_end
  553.  
  554.  
  555. ******************************************************************************
  556. *
  557. *  òöò¬ò\Ī
  558. *
  559. *    d2.w:i  y
  560. *    d3.w:i  vy
  561. *    d4.w:i  yi
  562. *    a0.l:i  vwork
  563. *    a2.l:i  vram address
  564. ******************************************************************************
  565. .xdef GetPart
  566. GetPart
  567.  
  568.   cmp.w   Yline(a6),d2
  569.   bcc     GetPart100
  570.  
  571. * a2.l = VRAM▒─▐┌╜
  572. *-------------------------
  573.    movea.l VSadr(a6),a2
  574.    adda.l  a3,a2
  575.    adda.l  a3,a2
  576.  
  577.    moveq.l #0,d0
  578.    move.w  d3,d0
  579.    divu.w  VSYsize(a6),d0
  580.    swap.w  d0
  581.    mulu.w  VSXsize(a6),d0
  582.    add.l   d0,d0
  583.    adda.l  d0,a2
  584.  
  585.    move.w  XS(a6),d0
  586.    moveq.l #$07,d1
  587.    and.w   d0,d1
  588.    and.w   #$fff8,d0
  589.    add.w   d1,d1
  590.    lsl.w   #6+1-3,d0
  591.    adda.w  d1,a0
  592.    adda.w  d0,a0
  593. *
  594. *-------------------------
  595.   moveq.l #8-1,d7
  596.   move.w  VE(a6),d1
  597.   move.b  Sys_flag2(a6),d6
  598.   move.l  VSXbyte(a6),d5
  599.   move.l  GETP_adrs(a6),a1
  600. getp40
  601.     cmp.w   YS(a6),d2
  602.     bcs     getp95
  603. *
  604. getp45
  605.     cmp.w   Interval+6(a6),d4
  606.     bcs     getp90
  607.  
  608.       btst    #4,d6
  609.       bne     getp80            ë╝æzëµû╩é╔æ╬é╡é─ôWèJ
  610.       btst    #3,d6
  611.       bne     getp80            ê╩ÆuÄwÆΦéáéΦ
  612.  
  613. *--- ê╩ÆuÄwÆΦû│é╡üAâXâNâìü[âïæ╬ë₧ ---
  614.  
  615.       movea.l a2,a5
  616.       movea.l a0,a4
  617.       jsr     (a1)
  618.       adda.l  d5,a2            1lineë║
  619.       sub.w   Interval+6(a6),d4
  620.       addq.w  #1,d3
  621.       cmp.l   #$c00000+512*512*2,a2
  622.       bcs     getp45
  623.       sub.l   #512*512*2,a2
  624.      bra     getp45
  625.  
  626. *ë╝æzëµû╩üAê╩ÆuÄwÆΦùLéΦüAâXâNâìü[âïé╡é╚éó
  627. *--------------------------------
  628. getp80
  629.     btst    #5,d6
  630.     bne    getp81            ë╝æzëµû╩âtâ@âCâïé╔æ╬é╡é─ôWèJ
  631.     cmp.w    d3,d1
  632.     bcs    getp85
  633.     movea.l    a2,a5
  634.     movea.l    a0,a4
  635.     jsr    (a1)
  636.     bra    getp85
  637.  
  638. *ë╝æzëµû╩âtâ@âCâïé╔æ╬é╡é─ôWèJ
  639. *--------------------------------
  640. getp81
  641.       cmp.w   d3,d1
  642.       bcs     getp85
  643.  
  644.     *ÄwÆΦê╩Æué▄é┼âVü[âN
  645.     *-----------------------------
  646.     clr.w    -(sp)
  647.     pea.l    (a2)
  648.     move.w    VShandle(a6),-(sp)
  649.     dos    _SEEK
  650.     addq.w    #2+4+2,sp
  651.     tst.l    d0
  652.     bpl    getp_VSF50    âVü[âNÅoùêé╜
  653.     cmp.w    #-25,d0
  654.     bne    Write_error
  655.  
  656.     *ÄwÆΦê╩Æué▄é┼âVü[âNÅoùêé╚éóé╠é┼üAÅoùêéΘÅèé▄é┼âVü[âN
  657.     *-----------------------------
  658.     move.w    #2,-(sp)
  659.     clr.l    -(sp)
  660.     move.w    VShandle(a6),-(sp)
  661.     dos    _SEEK
  662.     addq.w    #2+4+2,sp
  663.     tst.l    d0
  664.     bmi    Write_error
  665.  
  666.     *ÄwÆΦê╩Æué▄é┼éOé≡Åæé½ì₧é▐é╜é▀é╠▄░╕┤╪▒ì∞ɼ
  667.     *-----------------------------
  668.     movea.l    VSFile_buf_adrs(a6),a5
  669.     move.l    VSFile_buf_size(a6),d5
  670.     bsr    clear_area
  671.  
  672.     *ÄwÆΦê╩Æué▄é┼éOé≡Åæé½ì₧é▐
  673.     *-----------------------------
  674.     move.l    a2,d5
  675.     sub.l    d0,d5                d5=Åæé½ì₧é▐âoâCâgÉö
  676.     move.l    VSFile_buf_size(a6),d0
  677.     movea.l    VSFile_buf_adrs(a6),a5
  678.     bsr    write_nbytes
  679.  
  680.     *ëµæ£├▐░└ôWèJ
  681.     *--------------------------------
  682. getp_VSF50
  683.     move.l    VSXbyte(a6),d5
  684.     movea.l    VSFile_buf_adrs(a6),a5
  685.     movea.l    a0,a4
  686.     jsr    (a1)
  687.  
  688.     *ëµæ£├▐░└é≡âtâ@âCâïé╔Åoù═
  689.     *--------------------------------
  690.     move.l    VSFile_buf_size(a6),d5
  691.     movea.l    VSFile_buf_adrs(a6),a5
  692.     bsr    GetPart_VSF_sub
  693.     move.l    VSXbyte(a6),d5
  694.  
  695. *ăé╠╫▓▌é╠Åêù¥é╓
  696. *--------------------------------
  697. getp85
  698.     adda.l    d5,a2            1lineë║
  699.     sub.w    Interval+6(a6),d4
  700.     addq.w    #1,d3
  701.     bra    getp45
  702.  
  703. getp90
  704.     add.w   Interval+4(a6),d4
  705. getp95
  706.     lea     16(a0),a0
  707.     addq.w  #1,d2
  708.     cmp.w   Yline(a6),d2
  709.     dbcc    d7,getp40
  710. GetPart100
  711.   rts
  712.  
  713.  
  714.  
  715.  
  716. .xdef    write_nbytes
  717. write_nbytes
  718.     sub.l    d0,d5
  719.     bls    write_nbytes_10
  720.  
  721.     movem.l    d0/d5,-(sp)
  722.     move.l    d0,d5
  723.     bsr    GetPart_VSF_sub
  724.     movem.l    (sp)+,d0/d5
  725.     bra    write_nbytes
  726.  
  727. write_nbytes_10
  728.     add.l    d0,d5
  729.  
  730. GetPart_VSF_sub
  731.  
  732.     *ëµæ£├▐░└é≡âtâ@âCâïé╔Åoù═
  733.     *--------------------------------
  734.     move.l    d5,-(sp)
  735.     move.l    a5,-(sp)
  736.     move.w    VShandle(a6),-(sp)
  737.     dos    _WRITE
  738.     lea.l    4+4+2(sp),sp
  739.     tst.l    d0
  740.     bmi    Write_error
  741.     cmp.l    d5,d0
  742.     bne    Write_error
  743.     rts
  744.  
  745.  
  746.   .end
  747.